﻿using Common.Contract.Authentication.Record;
using Common.Contract.Customer.Record;
using Common.Contract.SystemConfig.Record;
using Customer.Model.Model;
using System;
using System.Collections.Generic;

namespace Customer.Model.Interface
{
    public interface ICustomerProvider
    {
        List<CustomerInfoDescription> RetrieveAllCustomerInfoCode();
        List<Customers> RetrieveCustomerByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null, string type = null);
        List<ProductCardRawDaily> RetrieveCustomerCardByCif(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, int pagesize = 0, int pageindex = 0);
        CountCustSegmentRecord CountCustSubSegment(UserRecord dao);
        List<CustomerPriority> RetrieveCustomerPriorityByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0);
        List<CustomerFeedback> RetrieveCustomerFeedbackByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0);
        List<CustomerFreedom> RetrieveCustomerFreedomByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0);
        List<CustomerFeedbackDetail> RetrieveCustomerFeedbackDetailByCif(out int totalRecord, string cif, int pagesize = 0, int pageindex = 0);
        List<CustomerNeedUpdateInfo> RetrieveCustomerNeedToUpdateInfoByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0);
        List<CustomerNeedUpdateInfoRaw> RetrieveCustomerNeedToUpdateInfoRawByCif(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0);
        List<CustomerLowValue> RetrieveCustomerLowValueByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null, string type = null);
        List<CustomerRegion> RetrieveCustomerDepositByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null, string group = null, string grouptype = null);
        List<CustomerRegion> RetrieveCustomerLoanByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, string group = null, string grouptype = null);
        List<CustomerRegion> RetrieveCustomerCardByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null);
        List<ProductI2B> RetrieveCustomerI2bByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null);
        List<CustomerRegion> RetrieveCustomerPosByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null);
        List<ProductTrade> RetrieveCustomerTradeByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null);
        List<ProductChuoi> RetrieveCustomerChuoiByDao(out int totalRecord, UserRecord dao, FilterRecord textSearch = null, string lang = null, int pagesize = 0, int pageindex = 0, DateTime? fromDate = null);
        List<string> RetrieveListProductDeposit(string dao, string group, DateTime? fromDate = null);
        List<string> RetrieveListProductLoan(string dao, string group);
        List<ProductI2BDetail> RetrieveListProductI2BDetailByCif(out int totalRecord, string cif, int pagesize = 0, int pageindex = 0);
        Customers RetrieveCustomerByCif(string cif);
        CustomerContact RetrieveCustomerContactByCif(string cif);
        ProfitAbility RetrieveToiAccumulatedCustByCif(string cif);
        ProfitAbility RetrieveToiAvgBalAccumulatedCustByCif(string cif);
        List<CustomerTop10> RetrieveCustomerTop10(UserRecord dao, int type, FilterRecord filter);
        List<NewLending> RetrieveNewLendingByCif(string cif);
        List<CustomerFinanceInfo> RetrieveCustomerFinanceInfoByCif(string cif);
        List<CustomerLimitInfo> RetrieveCustomerLimitInfoByCif(string cif);
    }
}